k8s只是一個平台,要發揮他的價值就要讓適合的服務運行在上面,所以從今天開始就會介紹一些有趣的服務(不一定適合k8s)。
NATS是一項streaming服務平台,使用的是publish/subscribe 架構,較為完整的NATS平台會包含NATS及NATS streaming(事實上是在NATS內啟用NATS streaming),前者為發佈和訂閱所使用的,後者為提供NATS的持久化儲存,但是在使用NATS streaming時其實還是連到NATS;而更新的架構是使用NATS內部啟用JetStream 。
雖然我會期望k8s上的服務盡量是以無狀態的方式運行,不過如果考量到資料要保留一段時間儲存,那麼在也是可以提供一個小的pv空間做NATS streaming cluster;那麼NATS cluster長什麼樣子呢?
這是官網的一張NATS cluster圖,NATS讓client端各自打自己想要打的端點,並且訂閱想要的subject,這樣的架構有什麼樣的好處呢?
當配上NATS streaming後架構會多出以下
不過在今天寫文章時,重新去對了網站上的資訊,發現NATS streaming準備棄用(使用至2023/6),而官方接手的專案叫做jetstream,與NATS streaming一樣是運行於NATS上,同時可以使用CRD運行在k8s上。
這張圖簡略地說明了jetstream對於訊息的發布和訂閱機制的流向,那麼為什麼要改用Jetstream呢?主要原因在於雖然NATS Streaming解決了NATS的儲存問題及確保訊息送達,但是變得沒辦法水平擴展了,JetStream改變了一些架構,像是運用了RAFT演算法、Stream data replication的機制,因此NATS的可用性更加地提升了。